home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / hity wydania / Ubuntu 9.10 PL / karmelkowy-koliberek-9.10-netbook-remix-PL.iso / casper / filesystem.squashfs / usr / share / pyshared / nevow / i18n.pyc (.txt) < prev    next >
Python Compiled Bytecode  |  2009-03-23  |  8KB  |  217 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.6)
  3.  
  4. from zope.interface import implements
  5. from nevow import inevow
  6.  
  7. def languagesFactory(ctx):
  8.     header = inevow.IRequest(ctx).getHeader('accept-language')
  9.     if header is None:
  10.         return []
  11.     langs = []
  12.     for lang in header.split(','):
  13.         quality = 1
  14.         langs.append((quality, lang))
  15.         if '-' in lang:
  16.             langs.append((quality, lang.split('-')[0]))
  17.             continue
  18.         None if ';' in lang else header is None
  19.     
  20.     langs.sort((lambda a, b: cmp(b[0], a[0])))
  21.     return [ lang for quality, lang in langs ]
  22.  
  23.  
  24. class I18NConfig(object):
  25.     implements(inevow.II18NConfig)
  26.     
  27.     def __init__(self, domain = None, localeDir = None):
  28.         self.domain = domain
  29.         self.localeDir = localeDir
  30.  
  31.  
  32.  
  33. class PlaceHolder(object):
  34.     
  35.     def __init__(self, translator, *args, **kwargs):
  36.         self.translator = translator
  37.         self.args = args
  38.         self.kwargs = kwargs
  39.         _mod = kwargs.pop('_mod', None)
  40.         if _mod is None:
  41.             _mod = []
  42.         
  43.         self.mod = _mod
  44.  
  45.     
  46.     def __mod__(self, other):
  47.         kw = { }
  48.         kw.update(self.kwargs)
  49.         kw['_mod'] = self.mod + [
  50.             other]
  51.         return self.__class__(self.translator, *self.args, **kw)
  52.  
  53.     
  54.     def __repr__(self):
  55.         args = []
  56.         if self.args:
  57.             args.append('*%r' % (self.args,))
  58.         
  59.         args.append('translator=%r' % self.translator)
  60.         if self.kwargs:
  61.             args.append('**%r' % self.kwargs)
  62.         
  63.         s = '%s(%s)' % (self.__class__.__name__, ', '.join(args))
  64.         for mod in self.mod:
  65.             s += ' %% %r' % (mod,)
  66.         
  67.         return s
  68.  
  69.  
  70.  
  71. def flattenL10n(placeHolder, ctx):
  72.     kw = placeHolder.kwargs
  73.     
  74.     try:
  75.         languages = inevow.ILanguages(ctx)
  76.     except TypeError:
  77.         pass
  78.  
  79.     kw = dict(kw)
  80.     kw['languages'] = languages
  81.     
  82.     try:
  83.         cfg = inevow.II18NConfig(ctx)
  84.     except TypeError:
  85.         pass
  86.  
  87.     kw = dict(kw)
  88.     if cfg.domain is not None:
  89.         kw['domain'] = cfg.domain
  90.     
  91.     if cfg.localeDir is not None:
  92.         kw['localeDir'] = cfg.localeDir
  93.     
  94.     s = placeHolder.translator(*placeHolder.args, **kw)
  95.     for mod in placeHolder.mod:
  96.         s = s % mod
  97.     
  98.     return s
  99.  
  100.  
  101. class Translator(object):
  102.     """
  103.     A gettext-like Translator for Nevow.
  104.  
  105.     The major difference between this and naive gettext is that with
  106.     Translator, the actual translation is done as part of Nevow's
  107.     flattening process, allowing per-user settings to be retrieved via
  108.     the context.
  109.  
  110.     @ivar translator: the actual translation function to use.
  111.  
  112.     @ivar args: positional arguments to pass to translator.
  113.  
  114.     @ivar kwargs: keyword arguments to pass to translator.
  115.  
  116.     @ivar gettextFunction: If using the default translator function,
  117.     name of GNU gettext function to wrap. Useful for 'ungettext'.
  118.     """
  119.     translator = None
  120.     args = None
  121.     kwargs = None
  122.     gettextFunction = 'ugettext'
  123.     
  124.     def _gettextTranslation(self, *args, **kwargs):
  125.         domain = kwargs.pop('domain', None)
  126.         localeDir = kwargs.pop('localeDir', None)
  127.         languages = kwargs.pop('languages', None)
  128.         import gettext as gettext
  129.         translation = gettext.translation(domain = domain, localedir = localeDir, languages = languages, fallback = True)
  130.         fn = getattr(translation, self.gettextFunction)
  131.         return fn(*args, **kwargs)
  132.  
  133.     
  134.     def __init__(self, **kwargs):
  135.         '''
  136.         Initialize.
  137.  
  138.         @keyword translator: the translator function to use.
  139.  
  140.         @keyword gettextFunction: The GNU gettext function to
  141.         wrap. See class docstring.
  142.  
  143.         @param kwargs: keyword arguments for the translator function.
  144.         '''
  145.         translator = kwargs.pop('translator', None)
  146.         if translator is not None:
  147.             self.translator = translator
  148.         
  149.         if self.translator is None:
  150.             self.translator = self._gettextTranslation
  151.         
  152.         gettextFunction = kwargs.pop('gettextFunction', None)
  153.         if gettextFunction is not None:
  154.             self.gettextFunction = gettextFunction
  155.         
  156.         self.kwargs = kwargs
  157.  
  158.     
  159.     def __call__(self, *args, **kwargs):
  160.         '''
  161.         Translate a string.
  162.  
  163.         @param args: arguments to pass to translator, usually the
  164.         string to translate, or for things like ungettext two strings
  165.         and a number.
  166.  
  167.         @param kwargs: keyword arguments for the translator.
  168.         Arguments given here will override the ones given at
  169.         initialization.
  170.  
  171.         @return: a placeholder that will be translated
  172.         when flattened.
  173.  
  174.         @rtype: PlaceHolder
  175.         '''
  176.         kw = dict(self.kwargs)
  177.         kw.update(kwargs)
  178.         return PlaceHolder(self.translator, *args, **kw)
  179.  
  180.  
  181. _ = Translator()
  182. ungettext = Translator(gettextFunction = 'ungettext')
  183.  
  184. def render(translator = None):
  185.     """
  186.     Render a localised message.
  187.  
  188.     >>> from nevow import i18n, rend
  189.     >>> class MyPage(rend.Page):
  190.     ...     render_i18n = i18n.render()
  191.  
  192.     or, to use a specific domain:
  193.  
  194.     >>> from nevow import i18n, rend
  195.     >>> _ = i18n.Translator(domain='foo')
  196.     >>> class MyPage(rend.Page):
  197.     ...     render_i18n = i18n.render(translator=_)
  198.  
  199.     """
  200.     if translator is None:
  201.         translator = _
  202.     
  203.     
  204.     def _render(page, ctx, data):
  205.         children = ctx.tag.children
  206.         ctx.tag.clear()
  207.         for child in children:
  208.             if isinstance(child, basestring):
  209.                 child = translator(child)
  210.             
  211.             ctx.tag[child]
  212.         
  213.         return ctx.tag
  214.  
  215.     return _render
  216.  
  217.